/*
    This file is part of MOOPerformanceAssessment.

    MOOPerformanceAssessment is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    MOOPerformanceAssessment is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with MOOPerformanceAssessment; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

    Authors: Thomas Voß, 2007
    Contact: thomas.voss.bochum@googlemail.com
*/

#include <Wilcoxon.h>
#include <MOOPerformanceAssessmentConfig.h>

#include <stat.hpp> // From Orange

std::vector<std::vector<double> > Wilcoxon::operator()( const std::vector<std::vector<std::vector<double> > > & indicatorValues,
							    const MOOPerformanceAssessmentConfig & config )	
{
    std::vector<std::vector<double> > result;

    for( unsigned i = 0; i < indicatorValues.size(); i++ ) // Algorithms
	{
	    std::vector<double> indValues;
    
	    for( unsigned j = 0; j < indicatorValues[i].size(); j++ ) // Trials
		for( unsigned k = 0; k < indicatorValues[i][j].size(); k++ ) // Indicators
		    {
			indValues.push_back( indicatorValues[i][j][k] );
		    }

	    for( unsigned j = i+1; j < indicatorValues.size(); j++ ) // Once again all algorithms
		{
		    std::vector<double> indValuesTmp;
		    for( unsigned k = 0; k < indicatorValues[j].size(); k++ ) // Trials
			for( unsigned l = 0; l < indicatorValues[j][k].size(); l++ ) // Indicators
			    {
				indValuesTmp.push_back( indicatorValues[j][k][l] );
			    }
		    double result, prob = 0.05;
		    result = wilcoxont( indValues, indValuesTmp, prob );
		    qDebug( "Result: %f, \tProb: %f", result, prob );
		}
	}
    
    return( result );
}
